package cn.biplam.common.struc;

import cn.biplam.common.paramters.ModelType;
import cn.biplam.common.paramters.ModelType.Model_Type;
import cn.biplam.common.wrapper.ErrorMessage;

/**
 * 元数据模型表结构
 * @author XiaoRuxing Sep 24, 20092:28:01 PM
 * @version 1.0
 */
public abstract class MdStruc {

	/**
	 * 业务模型表元数据表
	 * bm_model_table
	 */
	public static class BmModelTableStruc
	{
		/** 主键ID，即业务表ID */
		public static final String tableID="oid";
		/** 排序ID */
		public static final String orderID="orid";
		/** 业务表名 */
		public static final String tableName="table_name";
		/** 业务表中文名 */
		public static final String tableCnName="table_cn_name";
		/** 业务表说明 */
		public static final String tableComments="table_comments";
		/** 业务表所属主题ID */
		public static final String themeID="mid";
	}

	/**
	 * 业务表字段表结构
	 * bm_model_table_col
	 */
	public static class BmModelTableColStruc{
		/** 表字段编号 */
		public static final String COLUMN_ID = "ocid";
		/** 字段所属表编号 */
		public static final String TABLE_ID="oid";
		/** 字段排序号 */
		public static final String COLUMN_ORDER="orid";
		/** 字段物理名称 */
		public static final String COLUMN_NAME="column_name";
		/** 字段中文名称 */
		public static final String COLUMN_CN_NAME="column_cn_name";
		/** 字段描述 */
		public static String COLUMN_COMMENTS="col_comments";
		/** 字段数据类型 */
		public static final String DATA_TYPE="data_type";
		/** 字段Precision */
		public static final String DATA_PRECISION="data_precision";
		/** 字段scale */
		public static final String DATA_SCALE="data_scale";
		/** 字段是否可以为空 */
		public static final String NULL_ABLE="nullable";
		/** 字段是否主键 */
		public static final String IS_PK="is_pk";
		/** 字段长度 */
		public static final String DATA_LENGTH="data_length";
		/** 字段是否外键 */
		public static final String IS_FK="is_fk";
	}

	/**
	 * 业务对象主题元数据表数据结构 
	 * bm_model_theme
	 */
	public static class BmModelThemeStruc{
		/** 主题ID字段 */
		public static final String themeID="mid";
		/** 父主题ID字段 */
		public static final String parentThemeID="parent_theme_id";
		/** 主题名称 */
		public static final String themeName="theme_name";
		/** 主题描述 */
		public static final String themeDesc="theme_desc";
		/** 主题数据源ID */
		public static final String dsID="dsid";
		/** 主题类型 1：根主题 2:非根主题 非根主题允许移动、插入表 */
		public static final String themeType = "theme_type";
		/** 排序id*/
		public static final String ORID = "orid";
	}

	/**
	 * 业务对象外键关系表结构
	 * bm_table_foreign_ref
	 */
	public static class BmTableForeignRefStruc{
		/** 关系ID */
		public static final String Relation_ID="reid";
		/** 关系名称 */
		public static final String Relation_Name="re_name";
		/** 主键表ID */
		public static final String Main_Table_ID="main_table_id";
		/** 外键表ID */
		public static final String Foreign_Table_ID="foreign_table_id";
		/** 关系类型 */
		public static final String Relation_Type="re_type";
	}

	/**
	 * 业务对象模型外键字段关系表结构
	 * bm_table_foreign_ref_col
	 */
	public static class BmTableForeignRefColStruc{
		/** 外键字段关系ID */
		public static final String Fk_Column_Relation_ID="rcoid";
		/** 外键关系主键表字段ID */
		public static final String Main_Table_Column_ID="main_table_col_id";
		/** 外键关系外键表字段ID */
		public static final String Foreign_Table_Column_ID="foreign_table_col_id";
		/** 外键关系ID */
		public static final String Fk_Relation_ID="reid";
		/** 主键表字段名称 */
		public static final String Main_Table_Column_Name = "main_table_column_name";
		/** 外键表字段名称 */
		public static final String Foreign_Table_Column_Name = "foreign_table_column_name";
	}

	/**
	 * 数据仓库模型表元数据表表结构
	 * dw_model_table
	 */
	public static class DwModelTableStruc
	{
		/** 主键ID，即数据仓库表ID */
		public static final String tableID="woid";
		/** 排序ID */
		public static final String orderID="orid";
		/** 数据仓库表名 */
		public static final String tableName="table_name";
		/** 数据仓库表中文名 */
		public static final String tableCnName="table_cn_name";
		/** 数据仓库表说明 */
		public static final String tableComments="table_comments";
		/** 数据仓库表所属主题ID */
		public static final String themeID="mid";
	}

	/**
	 * 数据仓库表字段表结构
	 * dw_model_table_col
	 */
	public static class DwMdTableColStruc{
		/** 表字段编号 */
		public static final String COLUMN_ID = "wocid";
		/** 字段所属表编号 */
		public static final String TABLE_ID="woid";
		/** 字段排序号 */
		public static final String COLUMN_ORDER="orid";
		/** 字段物理名称 */
		public static final String COLUMN_NAME="column_name";
		/** 字段中文名称 */
		public static final String COLUMN_CN_NAME="column_cn_name";
		/** 字段描述 */
		public static final String COLUMN_COMMENTS="col_comments";
		/** 字段数据类型 */
		public static final String DATA_TYPE="data_type";
		/** 字段Precision */
		public static final String DATA_PRECISION="data_precision";
		/** 字段scale */
		public static final String DATA_SCALE="data_scale";
		/** 字段是否可以为空 */
		public static final String NULL_ABLE="nullable";
		/** 字段是否主键 */
		public static final String IS_PK="is_pk";
		/** 字段长度 */
		public static final String DATA_LENGTH="data_length";
		/** 字段是否外键 */
		public static final String IS_FK="is_fk";
	}

	/**
	 * 数据仓库主题元数据表
	 * dw_model_theme
	 */
	public static class DwModelThemeStru{
		/** 主题ID字段 */
		public static final String themeID="mid";
		/** 父主题ID字段 */
		public static final String parentThemeID="parent_theme_id";
		/** 主题名称 */
		public static final String themeName="theme_name";
		/** 主题描述 */
		public static final String themeDesc="theme_desc";
		/** 主题数据源ID */
		public static final String dsID="dsid";
		/** 主题类型 1：根主题 2:非根主题 非根主题允许移动、插入表 */
		public static final String themeType = "theme_type";
		/** 排序id*/
		public static final String ORID = "orid";
	}

	/**
	 * 数据仓库模型外键关系表结构
	 * dw_table_foreign_ref
	 */
	public static class DwTabForeignRefStruc{
		/** 关系ID */
		public static final String Relation_ID="reid";
		/** 关系名称 */
		public static final String Relation_Name="re_name";
		/** 主键表ID */
		public static final String Main_Table_ID="main_table_id";
		/** 外键表ID */
		public static final String Foreign_Table_ID="foreign_table_id";
		/** 关系类型 */
		public static final String Relation_Type="re_type";
	}

	/**
	 * 数据仓库模型外键字段关系表
	 * dw_table_foreign_ref_col
	 */
	public static class DwTabForeignRefColStruc{
		/** 外键字段关系ID */
		public static final String Fk_Column_Relation_ID="rcoid";
		/** 外键关系主键表字段ID */
		public static final String Main_Table_Column_ID="main_table_col_id";
		/** 外键关系外键表字段ID */
		public static final String Foreign_Table_Column_ID="foreign_table_col_id";
		/** 外键关系ID */
		public static final String Fk_Relation_ID="reid";
	}

	/**
	 * 源系统模型表元数据表表结构
	 * src_model_table
	 */
	public static class SrcMdTabStruc
	{
		/** 主键ID，即源系统表ID */
		public static final String tableID="oid";
		/** 排序ID */
		public static final String orderID="orid";
		/** 源系统表表名 */
		public static final String tableName="table_name";
		/** 源系统表中文名 */
		public static final String tableCnName="table_cn_name";
		/** 源系统表说明 */
		public static final String tableComments="table_comments";
		/** 源系统表所属主题ID */
		public static final String themeID="mid";
		/** 物理主键 */
		public static final String PHYSICAL_PK = "physical_pk";
		/** 主键唯一 */
		public static final String PK_UNIQUE = "pk_unique";
		/** 主键是否存在空值 */
		public static final String EXIST_EMPTY = "exist_empty";
		/** 主键总记录数 */
		public static final String TOTAL_RECORD = "total_record";
		/** 主键空值数量 */
		public static final String EMPTY_COUNT = "empty_count";
		/** 重复主键举例 */
		public static final String REPEAT_PK_EXAMPLE = "repeat_pk_example";
		/** 外键完整性*/
		public static final String FK_INTEGRITY = "fk_integrity";
		/** 外键总数量*/
		public static final String TOTAL_FK = "total_fk";
		/** 外键总通过数量*/
		public static final String INTEGRITY_FK = "integrity_fk";
		/** 外键是否存在空值*/
		public static final String FK_EXIST_EMPTY = "fk_exist_empty";
		/** 外键空值数量*/
		public static final String FK_EMPTY_COUNT = "fk_empty_count";
		/** 表数据探查结果*/
		public static final String DBS_TABLE_RESULT = "dbs_table_result";
		/** 表数据探查结果说明*/
		public static final String DBS_TABLE_RESULT_DESC = "dbs_table_result_desc";
		/** 主键数据探查结果*/
		public static final String DBS_PK_RESULT = "dbs_pk_result";
		/** 主键数据探查结果说明*/
		public static final String DBS_PK_RESULT_DESC = "dbs_pk_result_desc";
		/** 外键数据探查结果*/
		public static final String DBS_FK_RESULT = "dbs_fk_result";
		/** 外键数据探查结果说明*/
		public static final String DBS_FK_RESULT_DESC = "dbs_fk_result_desc";
		/** 字段数据探查结果*/
		public static final String DBS_FIELD_RESULT = "dbs_field_result";
		/** 字段数据探查结果说明*/
		public static final String DBS_FIELD_RESULT_DESC = "dbs_field_result_desc";
	}

	/**
	 * 源系统表字段表结构
	 * src_model_table_col
	 */
	public static class SrcModTabColStruc{
		/** 表字段编号 */
		public static final String COLUMN_ID = "ocid";
		/** 字段所属表编号 */
		public static final String TABLE_ID="oid";
		/** 字段排序号 */
		public static final String COLUMN_ORDER="orid";
		/** 字段物理名称 */
		public static final String COLUMN_NAME="column_name";
		/** 字段中文名称 */
		public static final String COLUMN_CN_NAME="column_cn_name";
		/** 字段描述 */
		public static final String COLUMN_COMMENTS="col_comments";
		/** 字段数据类型 */
		public static final String DATA_TYPE="data_type";
		/** 字段Precision */
		public static final String DATA_PRECISION="data_precision";
		/** 字段scale */
		public static final String DATA_SCALE="data_scale";
		/** 字段是否可以为空 */
		public static final String NULL_ABLE="nullable";
		/** 字段是否主键 */
		public static final String IS_PK="is_pk";
		/** 字段长度 */
		public static final String DATA_LENGTH="data_length";
		/** 字段是否外键 */
		public static final String IS_FK="is_fk";
		/** 符合主键探查类型 */
		public static final String MULTI_PK_TYPE="multi_pk_type";
		/** 复合主键包含 */
		public static final String MULTI_PK_INCLUDE="multi_pk_include";
		/** 字段状态 */
		public static final String COL_STATE="col_state";
		/** 探查结果 */
		public static final String DBS_RESULT="dbs_result";
	}

	/**
	 * 源系统主题元数据表数据结构 
	 * src_model_theme
	 */
	public static class SrcMdThemeStruc{
		/** 主题ID字段 */
		public static final String themeID="mid";
		/** 父主题ID字段 */
		public static final String parentThemeID="parent_theme_id";
		/** 主题名称 */
		public static final String themeName="theme_name";
		/** 主题描述 */
		public static final String themeDesc="theme_desc";
		/** 主题数据源ID */
		public static final String dsID="dsid";
		/** 主题类型 1：根主题 2:非根主题 非根主题允许移动、插入表 */
		public static final String themeType = "theme_type";
		/** 排序id*/
		public static final String ORID = "orid";
	}

	/**
	 * 源系统模型外键关系表结构
	 * src_table_foreign_ref
	 */
	public static class SrcTabForeRefStruc{
		/** 关系ID */
		public static final String Relation_ID="reid";
		/** 关系名称 */
		public static final String Relation_Name="re_name";
		/** 主键表ID */
		public static final String Main_Table_ID="main_table_id";
		/** 外键表ID */
		public static final String Foreign_Table_ID="foreign_table_id";
		/** 关系类型 */
		public static final String Relation_Type="re_type";
		/** 外键探查标志 */
		public static final String FK_FLAG="FK_FLAG";
		/** 外键探查附加标志 */
		public static final String FK_EXTRA_FLAG="FK_EXTRA_FLAG";
	}

	/**
	 * 源系统模型外键字段关系表结构
	 * src_table_foreign_ref_col
	 */
	public static class SrcTabForeRefColStruc{
		/** 外键字段关系ID */
		public static final String Fk_Column_Relation_ID=BaseStruc.ModelTableFkColStruc.Fk_Col_ID;
		/** 外键关系主键表字段ID */
		public static final String Main_Table_Column_ID=BaseStruc.ModelTableFkColStruc.Main_Table_Col_ID;
		/** 外键关系外键表字段ID */
		public static final String Foreign_Table_Column_ID=BaseStruc.ModelTableFkColStruc.Foreign_Table_Col_ID;
		/** 外键关系ID */
		public static final String Fk_Relation_ID=BaseStruc.ModelTableFkColStruc.Fk_ID;
		
		//以下是查询虚拟字段名称
		/** 主键表字段名称 */
		public static final String Main_Table_Column_Name=BaseStruc.ModelTableFkColStruc.MAIN_TABLE_COL_NAME;
		/** 外键表字段名称 */
		public static final String Foreign_Table_Column_Name =BaseStruc.ModelTableFkColStruc.FOREIGN_TABLE_COL_NAME;
	}

	/**
	 * 数据源表表结构 
	 * dbsource
	 */
	public static class DbSourStruc{
		/** 数据源ID */
		public static final String DB_SOURCE_ID = "dsid";
		/** 数据源名 */
		public static final String DB_SOURCE_NAME = "dsname";
		/** 数据源描述 */
		public static final String DB_SOURCE_DESC = "dsdesc";
		/** 数据库实例ID */
		public static final String DB_SOURCE_SID = "dssid";
		/** IP */
		public static final String IP = "ip";
		/** 端口 */
		public static final String PORT = "port";
		/** 用户名 */
		public static final String USRE_NAME = "username";
		/** 密码 */
		public static final String PASSWORD = "password";
		/** 数据库类型 */
		public static final String DB_TYPE_ID = "db_type_id";
		/** 主数据库 */
		public static final String MAIN_DB = "main_db";
		/** 数据源所属模型类型 */
		public static final String MODEL_TYPE = "type";
		/** 数据源类型1:jdbc 2:pool */
		public static final String DSTYPE = "dstype";
	}

	/**
	 * 业务模型类型表表结构 
	 * model_type
	 */
	public static class MdTypeStruc{
		/** 业务对象类型ID */
		public static final String MODEL_TYPE_ID="model_type_id";
		/** 业务对象类型名称 */
		public static final String MODEL_TYPE_NAME="model_type_name";
		/** 业务对象类型描述 */
		public static final String MODEL_TYPE_DESC="model_type_desc";
	}

	/**
	 * 导入比较表字段信息 表结构
	 * COMPARE_TABLE_COL
	 */
	public static class ImpCompTabColStruc{
		/** 唯一ID */
		public static final String CCID = "ccid";
		/** 导入表字段id */
		public static final String IMP_COL_ID = "imp_col_id";
		/** 导入表字段名称 */
		public static final String IMP_COL_NAME = "imp_col_name";
		/** 导入表字段中文名 */
		public static final String IMP_COL_CNAME = "imp_col_cname";
		/** 导入表字段描述 */
		public static final String IMP_COL_DESC = "imp_col_desc";
		/** 已有表字段id */
		public static final String EST_COL_ID = "est_col_id";
		/** 已有表字段名称 */
		public static final String EST_COL_NAME = "est_col_name";
		/** 已有表字段中文名 */
		public static final String EST_COL_CNAME = "est_col_cname";
		/** 已有表字段描述 */
		public static final String EST_COL_DESC = "est_col_desc";
		/** 对比信息表ID */
		public static final String CTID = "ctid";
		/** 操作类型 */
		public static final String OPERATOR_TYPE = "operator_type";
		/** 排序 */
		public static final String ORID = "orid";
		/** 任务号 */
		public static final String TASK_ID = "task_id";
	}

	/**
	 * 导入比较表信息 表结构
	 * COMPARE_TABLE
	 */
	public static class ImpCompTabStruc{
		/** 唯一ID */
		public static final String CTID = "ctid";
		/** 导入表id */
		public static final String IMP_TABLE_ID = "imp_table_id";
		/** 导入表名称 */
		public static final String IMP_TABLE_NAME = "imp_table_name";
		/** 导入表中文名 */
		public static final String IMP_TABLE_CNAME = "imp_table_cname";
		/** 导入表描述 */
		public static final String IMP_TABLE_DESC = "imp_table_desc";
		/** 已有表id */
		public static final String EST_TABLE_ID = "est_table_id";
		/** 已有表名称 */
		public static final String EST_TABLE_NAME = "est_table_name";
		/** 已有表中文名 */
		public static final String EST_TABLE_CNAME = "est_table_cname";
		/** 已有表描述 */
		public static final String EST_TABLE_DESC = "est_table_desc";
		/** 主题 */
		public static final String THEME = "theme";
		/** 操作类型 */
		public static final String OPERATOR_TYPE = "operator_type";
		/** 排序 */
		public static final String ORID = "orid";
		/** 任务号 */
		public static final String TASK_ID = "task_id";
	}

	/**
	 * 源数据表字段缓存区表结构
	 * src_table_col_buffer
	 */
	public static class SrcTabColBufStruc{
		/** 表字段编号 */
		public static final String COLUMN_ID = "wocid";
		/** 字段所属表编号 */
		public static final String TABLE_ID="woid";
		/** 字段排序号 */
		public static final String COLUMN_ORDER="orid";
		/** 字段物理名称 */
		public static final String COLUMN_NAME="column_name";
		/** 字段中文名称 */
		public static final String COLUMN_CN_NAME="column_cn_name";
		/** 字段描述 */
		public static final String COLUMN_COMMENTS="col_comments";
		/** 字段数据类型 */
		public static final String DATA_TYPE="data_type";
		/** 字段Precision */
		public static final String DATA_PRECISION="data_precision";
		/** 字段scale */
		public static final String DATA_SCALE="data_scale";
		/** 字段是否可以为空 */
		public static final String NULL_ABLE="nullable";
		/** 字段是否主键 */
		public static final String IS_PK="is_pk";
		/** 字段长度 */
		public static final String DATA_LENGTH="data_length";
		/** 字段是否外键 */
		public static final String IF_FK="is_fk";
		/** 批次号 */
		public static final String BATCH = "batch";
		/** 模型类型 */
		public static final String MODEL_TYPE = "model_type";
	}

	/**
	 * 源数据表对象缓冲表结构
	 * src_table_buffer
	 */
	public static class SrcTabBufferStruc
	{
		/** 主键ID，即表ID */
		public static final String TABLE_ID="woid";
		/** 排序ID */
		public static final String ORDER_ID="orid";
		/** 表名 */
		public static final String TABLE_NAME="table_name";
		/** 表中文名 */
		public static final String TABLE_CN_NAME="table_cn_name";
		/** 表说明 */
		public static final String TABLE_COMMENTS="table_comments";
		/** 主题ID */
		public static final String THEME_ID="mid";
		/** 当前缓存批次 */
		public static final String BATCH = "batch";
		/** 模型类型 */
		public static final String MODEL_TYPE = "model_type";
	}

	/**
	 * 模型导入任务表结构
	 * MODEL_IMPORT_TASK
	 */
	public static class MdImpTaskStruc{
		/** 唯一ID */
		public static final String TASK_ID = "TASK_ID";
		/** 任务描述 */
		public static final String TASK_DESC = "TASK_DESC";
		/** 任务操作目标业务模型类型 */
		public static final String MODEL_TYPE = "MODEL_TYPE";
		/** 任务操作目标主题 */
		public static final String MODEL_THEME = "MODEL_THEME";
		/** 任务操作状态 0:导入中 1:缓冲区 2:异常结束 3:完成*/
		public static final String STATUS = "STATUS";
		/** 任务开始时间 */
		public static final String START_TIME = "START_TIME";
		/** 任务结束时间 */
		public static final String END_TIME = "END_TIME";
		/** 默认子主题ID */
		public static final String DEFAULT_SUB_THEME = "DEFAULT_SUB_THEME";
	}

	/**
	 * 源数据表外键关系缓存区表结构
	 * src_table_fk
	 */
	public static class FkBufferStruc{
		/** 关系ID */
		public static final String Relation_ID="reid";
		/** 关系名称 */
		public static final String Relation_Name="re_name";
		/** 主键表ID */
		public static final String Main_Table_ID="main_table_id";
		/** 外键表ID */
		public static final String Foreign_Table_ID="foreign_table_id";
		/** 关系类型 */
		public static final String Relation_Type="re_type";
		/** 当前缓存区批次号 */
		public static final String BATCH = "batch";
		/** 模型类型 */
		public static final String MODEL_TYPE = "model_type";
	}

	/**
	 * 源数据外键字段关系缓存区表结构
	 * src_table_col_fk
	 */
	public static class FkColBufferStruc{
		/** 外键字段关系ID */
		public static final String Fk_Column_Relation_ID="rcoid";
		/** 外键关系主键表字段ID */
		public static final String Main_Table_Column_ID="main_table_col_id";
		/** 外键关系外键表字段ID */
		public static final String Foreign_Table_Column_ID="foreign_table_col_id";
		/** 外键关系ID */
		public static final String Fk_Relation_ID="reid";
		/** 数据缓存区批次号 */
		public static final String BATCH = "batch";
		/** 模型类型 */
		public static final String MODEL_TYPE = "model_type";
	}

	/**
	 * 数据库类型表表结构 
	 * DB_TYPE
	 */
	public static class DbTypeStruc{
		/** 数据库类型ID */
		public static final String DATABASE_TYPE="DB_TYPE_ID";
		/** 数据库类型名称 */
		public static final String TYPE_NAME="DB_TYPE_NAME";
		/** 数据库类型描述 */
		public static final String TYPE_DESC="DB_TYPE_DESC";
	}

	/**
	 * 字段数据类型表表结构 
	 * data_type
	 */
	public static class DataTypeStruc{
		/** 主键ID,类型ID */
		public static final String TYPE_ID="type_id";
		/** 数据类型名称 */
		public static final String TYPE_NAME="type_name";
		/** 数据类型对应的DDL模型类路径 */
		public static final String TYPE_CLASS_PATH="type_class_path";
	}
	
	/**
	 * 根据对象的类型，取对象的枚举类型
	 * @param objectType
	 * @return
	 * @throws ErrorMessage
	 */
	public static Model_Type getEnumModelType(String objectType) throws ErrorMessage{
		if(ModelType.Src.toString().equals(objectType)){
			return Model_Type.Src;
		}else if(ModelType.Bm.toString().equals(objectType)){
			return Model_Type.Bm;
		}else if(ModelType.Dw.toString().equals(objectType)){
			return Model_Type.Dw;
		}else if(ModelType.Bdsl.toString().equals(objectType)){
			return Model_Type.Bdsl;
		}else if(ModelType.Dm.toString().equals(objectType)){
			return Model_Type.Dm;
		}else{
			throw new ErrorMessage("MdObject.java objectType is not found:"+objectType+"!");
		}
	}

}
